/**
 * 
 */
package com.yidu.drug.action;

import java.util.List;
import java.util.Map;

import javax.annotation.Resource;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.yidu.drug.common.Message;
import com.yidu.drug.common.Tools;
import com.yidu.drug.model.DrugMaterialsModel;
import com.yidu.drug.model.DrugProductionModel;
import com.yidu.drug.model.RepertoryModel;
import com.yidu.drug.service.DrugMaterialsService;
import com.yidu.drug.service.DrugProductionService;
import com.yidu.drug.service.RepertoryService;

/**
 * 药品生产计划Action
 * @author 王志伟
 * @date 2018年8月30日 上午9:11:11
 * @version 1.0
 */
@Controller
@RequestMapping("drugProduction")
public class DrugProductionAction {

	//药品生产计划的service
	@Resource
	private DrugProductionService drpService;
	
	//药品材料的service
	@Resource
	private DrugMaterialsService dmService;
	
	//仓库库存的service
	@Resource
	private RepertoryService repService;
	
	//消息类
	Message m=new Message();
	
	/**
	 * 药品生产计划药品查询所有的方法
	 * @param limit 行数
	 * @param page 页数
	 * @param proId 生产计划ID
	 * @param drugId 药品ID
	 * @return 查询的Map集合
	 */
	@RequestMapping("/findByProId")
	@ResponseBody
	public Map<String, Object> findByProId(String limit, String page,String proId,String drugId){
		//返回查询的Map集合
		return drpService.findByProId(limit, page, proId,drugId);
	}
	
	/**
	 * 根据药品生产计划ID删除
	 * @param drpId 药品生产计划ID
	 * @return 消息类
	 */
	@RequestMapping("/delete")
	@ResponseBody
	public Message delete(String drpId){
		//接收删除的行数
		int count = drpService.deleteByPrimaryKey(drpId);
		//存入消息类
		m.setNum(count);
		//返回
		return m;
	}
	
	/**
	 * 修改药品生产计划表的方法
	 * @param drpId 药品生产计划ID
	 * @param drpNumber 药品生产的数量
	 * @param drugId 药品ID
	 * @return 消息类
	 */
	@RequestMapping("/update")
	@ResponseBody
	public Message update(String drpId,String drpNumber,String drugId){
		//定义变量
		int count=-1;
		//药品生产计划类加入药品生产计划ID 和 药品生产数量
		DrugProductionModel drp=new DrugProductionModel();
		drp.setDrpId(drpId);
	    drp.setDrpNumber(Long.valueOf(drpNumber));
	    //定义药品材料的List接收根据药品ID查询的数据
	    List<DrugMaterialsModel> dmList= dmService.findMatIdByDrugId(drugId);
	    //判断如果查询的List不为空
	    if(!Tools.isEmpty(dmList)){
	    	//forEach循环
	    	for (DrugMaterialsModel drugMaterialsModel : dmList) {
	    		//定义库存类接收根据业务ID查询库存（材料ID）
				RepertoryModel rep= repService.findByPwId(drugMaterialsModel.getMatId());
				//转换药品生产的数量
				Long num=(Long.valueOf(drpNumber));
				//如果药品生产的数量乘以药品材料配置的数量大于材料库存的数量
				if(num*drugMaterialsModel.getDmNumber()>rep.getRepNumber()){
					//改变变量
					count=0;
				}
			}
	    	//如果变量不等于0
		    if(count!=0){
		    	//根据药品生产计划修改并存入消息类返回
		    	m.setNum(drpService.updateByPrimaryKeySelective(drp));
		 	    return m;
		    }else{//否则将变量存入消息类并返回
		    	m.setNum(count);
		    	return m;
		    }
	    }else{//如果查询的List为空的话
	    	//改变变量加入消息类并返回
	    	count=-2;
	    	m.setNum(count);
	    	return m;
	    }
	}
	/**
	 * 药品生产计划的修改或者增加
	 * @param a 前台传过来的药品生产计划的Json数据
	 * @return 消息类
	 */
	@RequestMapping("/updateOrAdd")
	@ResponseBody
	public Message updateOrAdd(String a){
		//接收修改或者增加的行数并存到消息类返回
		int count=drpService.updateOrAdd(a);
		m.setNum(count);
	    return m;
	}
	
	/**
	 * 根据生产计划ID查询药品ID
	 * @param proId 生产计划ID
	 * @return 查询出来的药品集合
	 */
	@RequestMapping("/findDrugIdByProId")
	@ResponseBody
	public List<DrugProductionModel> findDrugIdByProId(String proId){
		//返回根据生产计划ID查询的药品集合
		return drpService.findDrugIdByProId(proId);
	}
	
	/**
	 * 药品生产计划的增加或者删除
	 * @param drugIds 药品ID的集合
	 * @param proId 生产计划ID
	 * @return 消息类
	 */
	@RequestMapping("/addOrDelete")
	@ResponseBody
	public Message addOrDelete(String drugIds,String proId){
		//接收药品生产计划增加或删除的行数存入消息类并返回
		int count=drpService.addOrDelete(drugIds,proId);
		m.setNum(count);
	    return m;
	}
}
